package com.info.zhiduoduo.core.service;

import com.info.zhiduoduo.repository.dto.maker.MakerDetailDto;
import com.info.zhiduoduo.repository.dto.partner.PartnerDetailDto;
import com.info.zhiduoduo.repository.dto.project.ProjectCompanyDto;
import com.info.zhiduoduo.repository.entity.company.*;
import com.info.zhiduoduo.repository.entity.complaint.Complaint;
import com.info.zhiduoduo.repository.entity.crowdsource.CrowdsourceTradeRecordItem;
import com.info.zhiduoduo.repository.entity.maker.MakerAccount;
import com.info.zhiduoduo.repository.entity.maker.MakerRescissionApply;
import com.info.zhiduoduo.repository.entity.maker.MakerStudio;
import com.info.zhiduoduo.repository.entity.maker.MakerZddProjectBid;
import com.info.zhiduoduo.repository.entity.order.TradeRecord;
import com.info.zhiduoduo.repository.entity.partner.PartnerAccount;
import com.info.zhiduoduo.repository.entity.partner.PartnerStudioWithdraw;
import com.info.zhiduoduo.repository.entity.partner.PartnerWithdraw;
import com.info.zhiduoduo.repository.entity.taxer.TaxerInvoice;

import java.math.BigDecimal;

public interface WxMessageService {

    /**
     * 工作室收到代付款时会提醒
     *
     * @param projectid
     * @return
     */
    boolean notifyUserIncomeChecked(int projectid);

    /**
     * 发布项目，通知创客
     *
     * @param projectid
     * @return
     */
    boolean notifyUserProjectPublish(int projectid);

    /**
     * 发布 项目失败/委托接单支付失败，通知tina
     *
     * @param notifyMsg
     * @return
     */
    boolean notifyAdminProjectPublishError(String notifyMsg);

    /**
     * 发布长期项目，通知创客
     *
     * @param projectid
     * @return
     */
    boolean notifyUserLongTermProjectPublish(int projectid);

    /**
     * 工作室提交验收时，企业收到通知
     *
     * @param projectid
     * @return
     */
    boolean notifyCompanyProjectCheck(int projectid);

    /**
     * 企业确认验收，工作室收到通知
     *
     * @param projectid
     * @return
     */
    boolean notifyUserProjectPassed(int projectid);

    /**
     * 企业确认验收，没有评价过的创客通知一下
     *
     * @param projectid
     * @return
     */
    boolean notifyMakerEvaluate(int projectid);

    /**
     * 创客完成纯代理项目，没有评价过的创客通知一下
     *
     * @param invoiceid
     * @return
     */
    boolean notifyMakerTaxerEvaluate(int invoiceid);

    /**
     * 众包项目支付完成，没有评价过的创客通知一下
     *
     * @param projectItemId
     * @return
     */
    boolean notifyMakerCrowdsourceProjectEvaluate(int projectItemId);

    /**
     * 众包项目支付完成，通知创客回款到账
     *
     * @param recordItem
     * @return
     */
    boolean notifyCrowdsourceProjectTradeItemPaid(CrowdsourceTradeRecordItem recordItem);

    /**
     * 测试环境-企业确认验收，没有评价过的创客通知一下
     *
     * @param projectid
     * @return
     */
    boolean testNotifyUserEvaluate(int projectid, String url);

    /**
     * 创客端评价：推送指定客服
     *
     * @param info
     * @return
     */
    boolean notifyCustomerService(String info);

    /**
     * 平台仲裁，工作室和企业收到通知
     *
     * @param projectid
     * @return
     */
    boolean notifyUserCompanyProjectArbitrate(int projectid);

    /**
     * 招行前置机网络错误，通知系统运营人员
     */
    void tradeNetErrorNotifyAdmin();

    /**
     * 支付失败，通知指定的操作人员。
     *
     * @param trade
     * @return
     */
    boolean notifyAdminPaymentFail(TradeRecord trade);

    /**
     * 支付失败，通知指定的操作人员（不包含创客）
     *
     * @param trade
     * @return
     */
    boolean notifyAdminPaymentFailNoMaker(TradeRecord trade);

    /**
     * 企业完成充值，收到通知
     *
     * @param rechargeid
     * @return
     */
    boolean notifyCompanyRecharged(int rechargeid);

    /**
     * 企业招商银行子帐本完成充值，收到通知
     *
     * @param recharge
     * @return
     */
    boolean notifyCompanyZhaoShangSubLedgerRecharged(CompanyZhaoshangSubLedgerRecharge recharge);

    /**
     * 企业招商银行子帐本完成充值，通知财务符嘉琳
     *
     * @param recharge
     * @return
     */
    boolean notifyCashierCompanyZhaoShangSubLedgerRecharged(CompanyZhaoshangSubLedgerRecharge recharge);

    /**
     * 企业招商银行记账子单元有一笔包含敏感词的转账充值，需要手动处理，通知财务纪锦娟
     *
     * @param record
     * @return
     */
    boolean notifyCashierCompanyZhaoShangSubLedgerIncomingRecordSensitive(CompanyZhaoshangSubLedgerIncomingRecord record);

    /**
     *  企业申请充值，通知财务
     * @param compname
     * @return
     */
    boolean notifyCompanyApplyRecharge(String compname);

    /**
     * 企业完成线下充值，收到通知
     *
     * @param rechargeid
     * @return
     */
    boolean notifyCompanyOfflineRecharged(CompanyOfflineRechargeDetail rechargeid);

    /**
     * 工作室通过实名认证收到通知
     *
     * @param acctid
     * @return
     */
    boolean userAuthState(int acctid);

    /**
     * 芜湖创客，通知委托定税视频审核失败
     *
     * @param makerStudio
     * @return
     */
    boolean notifyMakerEntrustTaxVideoRejected(MakerStudio makerStudio);

    /**
     * 工作室开户成功
     *
     * @param userid
     * @return
     */
    boolean userStudioConfirmed(int userid);

    /**
     * 企业通过实名认证收到通知
     *
     * @param compid
     * @return
     */
    boolean compAuthState(int compid);

    /**
     * 企业充值确认 验证码
     *
     * @param rechargeid
     * @param verifycode
     * @return
     */
    boolean sendVerifycode(int rechargeid, String verifycode);


    /**
     * 企业充值确认 验证码
     *
     * @param rechargeid
     * @param verifycode
     * @return
     */
    boolean sendOfflineVerifycode(int rechargeid, String verifycode);

    /**
     * 发送公告给指定用户
     *
     * @param title
     * @param openid
     * @return
     */
    boolean sendNotice(String title, String url, String openid);

    /**
     * 发送发票提醒给指定用户或企业
     *
     * @param toType 1：发给创客 2：发给企业
     * @return
     */
    boolean sendInvoiceNotice(int invoiceid, int toType);

    /**
     *  /纯代理 开票完成
     *
     * @param invoiceid
     * @return
     */
    boolean sendTaxerInvoiceNotice(int invoiceid);

    /**
     * 企业拒绝验收，工作室收到通知
     *
     * @param projectid
     * @return
     */
    boolean notifyUserProjectRefused(int projectid);

    /**
     * 通知客服人员，创客提交实名信息了。
     */
    boolean notifyCustomerAgents(int id);

    /**
     * 通知客服人员，企业提交实名信息了。
     */
    boolean notifyCompanyAgents(int id);

    /**
     * 通知客服人员，客户订购智小多订单请及时确认.
     */
    boolean notifyCompanyZhixiaoduo(int id);

    /**
     * 通知客户 智小多已开通.
     */
    boolean notifyTakeOrder(int id);

    /**
     * 天津创客开税户完成，通知企业可以交易
     */
    boolean notifyCompanyMakerOpenTax(Company company, MakerDetailDto userDetail);

    /**
     * 合伙人绩效通知，发给胡刚
     */
    boolean sendPerformanceNotice(PartnerDetailDto partner, int type);

    /**
     * 发送问卷调查公告通知
     */
    boolean sendSurveyNotice(String title, String content, String url, String openid);

    /**
     * 向ceo发送客户投诉信息
     */
    boolean sendComplaintNotice(Complaint complaint);

    /**
     * 智众包项目支付失败，通知客服
     *
     * @param recordItem
     * @return
     */
    boolean notifyCrowdsourcePayFailed(CrowdsourceTradeRecordItem recordItem);

    /**
     * 创客申请解约，各状态发送不同的微信消息
     *
     * @param apply state 状态 2：已受理 3：已拒绝 4：已完成解约
     * @return
     */
    boolean nofityMakerRescissionApply(MakerRescissionApply apply);

    /**
     * 通知创客工商认证图片审核失败.
     *
     * @param name
     * @param openid
     * @param reason
     * @return
     */
    boolean notifyBusinessAuthenticationFailed(String name, String openid, String reason,Integer userId);

    /**
     * 通知 财务, 平台线下支付的项目,待支付中.
     *
     * @param project
     * @return
     */
    boolean notifyJiugeOfflineProjectPaying(CompanyProject project);

    /**
     * 通知 财务, 企业申请转账到创客团账户
     *
     * @param companyTransferMakerGroupon
     * @return
     */
    boolean notifyCompanyTransferMakerGroupon(CompanyTransferMakerGroupon companyTransferMakerGroupon);

    /**
     * 支付失败，通知指定的操作人员。
     *
     * @param withdraw
     * @return
     */
    boolean notifyPartnerWithdrawFail(PartnerWithdraw withdraw);

    /**
     * 发送公告给指定用户
     *
     * @return
     */
    boolean sendPartnerStudioWithdrawNotice(PartnerAccount account, PartnerStudioWithdraw zhiduoduoWithdraw,
                                            PartnerStudioWithdraw crowdsourceWithdraw);

    /**
     * 发送给客服. 共青城创客活体检测失败
     *
     * @param account
     * @param msg
     * @return
     */
    boolean notifyCustomerAgentGongQingMakerDetectionFailure(MakerAccount account, String msg);

    /**
     * 第三方账户余额低于50万预警消息
     *
     * @param info
     * @return
     */
    boolean balanceInsufficientNotice(String info,int type);

    /**
     * 发送给创客 创客审核
     *
     * @param acctid 主键
     * @param flag   1 创客视频签名资料审核通知  2政府审核驳回注册个体户  3  创客实名审核通过（开户地选择的共青城）
     * @return true
     */
    boolean examineMakerToBusinessInfoNotify(int acctid, int flag);

    /**
     * 创客提交视频资料 发送消息给赵菲和梁秋颖审核
     *
     * @param acctid
     * @return
     */
    boolean makerSubmitDataNotify(int acctid);

    /**
     * 智众包项目 付款方式 为 九歌线下付款  发送消息给cindy
     *
     * @param projectId 智众包项目主键
     * @return true
     */
    boolean notifyJiugeOfflineCrowdSourceProjectPaying(int projectId);

    /**
     * 共青城创客，已实名未上传视频的，每天推送一次微信通知，最多提醒5次
     *
     * @param openid openid
     * @return true
     */
    boolean reminderToSubmitData(String openid,String name,Integer userId);

    /**
     * 催促企业上传 众包任务证据链
     *
     * @param openid openid
     * @param text   text
     * @return boolean
     */
    boolean urgeCompanyUploadProjectFile(String openid, String text, String name, Integer compId);


    /**
     * 在创客申请增值服务时发微信通知给赵菲、胡刚、夏伦聪
     *
     * @param id   需要传入的创客或者企业的id
     * @param typeId 增值类型
     * @return
     */
    boolean makerAppreciationServiceApplyNotice(int id, int typeId);


    /**
     * 在创客申请增值服务时发微信通知给赵菲、胡刚、夏伦聪
     *
     * @param id   需要传入的创客或者企业的id
     * @param typeId 增值类型
     * @return
     */
    boolean companyAppreciationServiceApplyNotice(int id, int typeId);


    /**
     * 运营端客服操作受理、驳回、完成的时候发微信通知给创客
     *
     * @param typeId 增值类型
     * @param id     需要通知的用户id
     * @param result 审核结果
     * @param remark 备注
     * @return
     */
    boolean makerAppreciationServiceAcceptedNotice(int typeId, int id, String result, String remark);

    /**
     * 运营端客服操作受理、驳回、完成的时候发微信通知给企业
     *
     * @param typeId 增值类型
     * @param id     需要通知的用户id
     * @param result 审核结果
     * @param remark 备注
     * @return
     */
    boolean companyAppreciationServiceAcceptedNotice(int typeId, int id, String result, String remark);


    /**
     * 客服异常事务处理，各种操作发微信通知给胡刚
     * @param content 具体内容
     * @param type 变更类型 1新增 2解决 3跟进
     * @param solve 变更结果 1已解决 2未解决
     * @param involvePeople 涉及人员
     */
    boolean sendNoticeToHuGangForServiceError(String content, int type, int solve, String involvePeople, Integer solvePeopleId, String followContent);

    /**
     * 运营端创客从实名列表到开户列表的时候，发送微信通知给创客绑定的企业和周雨辰
     * @param compId 企业id
     * @param makerName 创客名
     * @param studioName 工作室名
     * @return
     */
    boolean sendNoticeToCompanyAndZhouYuchenForOpenAnAccount(Integer compId, String makerName, String studioName);

    /**
     * 给芜湖的创客发送提醒定税视频的录制及上传
     *
     * @param makerDetailDto
     * @return
     */
    boolean notifyWuhuMakerTaxVideo(MakerDetailDto makerDetailDto);

    /**
     * 发票逾期提醒
     * @param content 提醒内容
     * @param invoiceType 发票类型：1：成本票创客，2：众包发票
     * @return
     */
    boolean invoiceOverdueNotice(String content, Integer invoiceType);

    /**
     *  项目竞标结果通知创客
     *
     * @param maker
     * @param bid
     * @return
     */
	boolean notifyMakerProjectBidResult(MakerDetailDto maker, CompanyProject project, MakerZddProjectBid bid);

    /**
     * 创客竞标 项目，通知企业审核
     *
     * @param project
     * @return
     */
	boolean notifyCompanyVerifyZddProjectBid(CompanyProject project, MakerZddProjectBid bid);

    /**
     * 企业分配创客给公开招标项目，通知创客进行项目
     *
     * @param maker
     * @param project
     * @return
     */
    boolean notifyMakerDispatchBid(MakerDetailDto maker, CompanyProject project);

    /**
     * 企业申请退款
     * @return
     */
    boolean enterpriseApplicationDorRefund(String openid, int type, String cause, BigDecimal amount,int businessManagerId);
    /**
     * 成本票逾期提醒
     * @param content 提醒内容
     * @return
     */
    boolean costTicketOverdue(String content);
    /**
     * 税务凭证逾期提醒
     *
     * @param content 提醒内容
     * @param openid
     * @return
     */
    boolean overdueTaxCertificate(String content,String openid);
    /**
     * 创客消息通知
     * @param userId 创客id
     * @param content 提醒内容
     * @return
     */
    boolean makerMessageNotification(int userId,String content);


    /**
     * 企业项目验收通知
     *
     * @param dto
     * @return
     */
    boolean enterpriseProjectAcceptanceNotice(ProjectCompanyDto dto);

    /**
     * 发给夏伦聪
     *
     * @param message 消息
     * @return
     */
    boolean sendTina(StringBuilder message);

    /**
     * 智零工业务发布后发微信通知给李含
     * @param projectId
     */
    void notifyWorkerAfterOddJobSubmit(int projectId);

    /**
     * 企业合同审核完成，发送通过/驳回通知
     *
     * @param companyEntrustFile
     * @return
     */
    void notifyCompanyContractAudit(CompanyEntrustFile companyEntrustFile);

    /**
     * 通知财务-刘晓语
     * @param content
     * @return
     */
    void informTheTreasurer(String content);

    void invoiceApplyNotifyKefu(TaxerInvoice invoice);
}
